#include "widget.h"
#include "ui_widget.h"
#include <thread>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //设置QLCDNumber的值除了使用display函数，还可以在ui界面设置intValue属性
    //在C语言中，sleep函数可以休眠，属于windows的api，需要包含头文件“Windows.h”，但是QT没办法用这个头文件


//    //这段代码运行之后看不到效果：因为main函数是先构造Widget的对象w，再进行显示操作，所以运行起来之后构造过程中先把lcdNumber从10减到0才显示出来
//    int value = ui->lcdNumber->intValue();
//    while (true) {
//    // 先休眠 1s
//    std::this_thread::sleep_for(std::chrono::seconds(1));//this_thread获取该线程，sleep_for是C++11提供的休眠函数
//    if (value <= 0) {
//        break;
//    }
//    value -= 1;
//    ui->lcdNumber->display(value);
//    }


    std::thread t([this] () {//上面的方法不行，那么创建新的线程执行修改界面的操作，同时再由主线程继续向后执行显示界面的操作的方法，也是行不通的
        int value = this->ui->lcdNumber->intValue();//因为QT禁止了除了主线程之外的其他线程修改界面，所以直接报错了
        while (true) {
            std::this_thread::sleep_for(std::chrono::seconds(1));
            if (value <= 0) {
                break;
            }
            value -= 1;
            ui->lcdNumber->display(value);
        }
    });

}

Widget::~Widget()
{
    delete ui;
}

